// 这个文件夹的作用是二次封装引入的axios，使其拥有请求拦截和响应拦截的作用，再抛出
import router from '@/router'; // 导入路由
import axios from 'axios';
import { showToast } from 'vant';
// 使用baseURL
axios.defaults.baseURL = 'http://localhost:3000';
// 设置响应头
axios.defaults.headers.post['Content-Type'] = 'application/json'

// 设置请求拦截和响应拦截，将拦截封装在axios中，使得所有的响应数据都可以进行统一处理

// 1. 请求拦截：请求发送前对请求进行预处理的过程
axios.interceptors.request.use(req => {
    let jwtToken = window.localStorage.getItem('token')
    if (jwtToken) {
        req.headers.Authorization = jwtToken
    }
    return req
})
// 2 .响应拦截：服务器响应后对响应进行后处理的过程
axios.interceptors.response.use(res => {
    if (res.status !== 200) {  // 程序错误

        showToast('服务器异常');// 轻提示
        return Promise.reject(res) // 弹出
    } else {

        if (res.data.status === 401) {  // 登录失效
            showToast(res.data.msg); // 轻提示
            router.push('/login')    // 跳转
            return Promise.reject(res)  // 弹出
        }

        // 接口成功，并返回了数据，判断是否是空数组：请求数据失败？拿到空数组
        if (res.data.code !== '8000') {  // 逻辑性错误
            showToast(res.data.msg); // 弹出后端返回的信息
            return Promise.reject(res)  // 将这个错误弹出
        }

        return res.data // 返回数据
    }
})

export default axios;